# 1-导包
import pymysql
# 2-定义一个函数，函数包含一个参数sql，实现的功能是执行sql，返回执行的结果
def db_util(sql):
    """
    执行SQL语句，返回执行的结果
    :param sql: 代表待执行的SQL语句
    :return: 执行结果
    """
    # 解决初始化赋值问题 conn和cur在缩进里面，出现异常是可能会无法赋值
    conn = None
    cur = None
    # 3-结合异常处理，执行sql操作
    try:
        # 4-创建数据库连接【实际工作使用，只需要修改连接配置，就可以使用】
        conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",password="iHRM_student_2022",
                               database="ihrm", charset='utf8')
        # 5-获取游标
        cur = conn.cursor()
        # 6-执行操作：查询 增删改 --》 判断是查询还是增删改，如果是查询，就执行执行SQL，返回查询的结果；
        # 如果是增删改，就先执行SQL,别忘了提交事务,返回被影响的行数
        if sql.split()[0].lower() == 'select':  # 代表的是查询语句
            cur.execute(sql)
            # print("数据库查询的结果：",cur.fetchall())
            return "数据库查询的结果："+str(cur.fetchall())
        else:  # 增删改操作
            cur.execute(sql)
            # 提交事务
            conn.commit()  # 提交事务
            # print("数据库增删改操作影响行数：",conn.affected_rows())
            return "数据库增删改操作影响行数："+str(conn.affected_rows())
    # 7-如果出现的了异常，就进行回归
    except Exception as e:
        print("数据库操作出现异常：",e)
        # 执行事务回滚
        conn.rollback()
    # 8-不管执行的结果怎么样，都关闭游标和连接
    finally:
        # 关闭游标
        cur.close()
        # 关闭连接
        conn.close()

if __name__ == '__main__':
    result1 = db_util("select * from t_book")
    print(result1)
    # result2 = db_util("insert into t_book(title, pub_date) values('西游记', '1986-01-01')")
    # print(result2)
